13、判断表头是否空值
# 检查空列:标题为空
headers=['姓名', None, None, '语文', '英语', '英语', None]
empty_header_cols = [i+1 for i, h in enumerate(headers) if h is None]
print(empty_header_cols)
# 检查空列:或 数据全空
dataA=[['小明', None, None, 67.0, 84.0, None, None],
['老张', None, None, 100.0, 34.0, None, None],
['小王', None, 12.0, 55.0, 34.0, None, None],
['小李', None, None, 95.0, None, None, None],
['老六', None, None, 43.0, 99.0, None, None],
['小王', None, None, 66.0, 65.0, None, None],
['小李', None, None, 22.0, 33.0, None, None],
[None, None, None, None, None, None, None]]
empty_data_cols = [col_idx+1 for col_idx in range(7) if all(row[col_idx] is None for row in dataA)]
print(empty_header_cols)
# 合并结果(优先标题为空)
merged_empty_cols = empty_header_cols if empty_header_cols else empty_data_cols
print(merged_empty_cols)
返回值:
[2, 3, 7]
[2, 3, 7]
[2, 3, 7]
这三行代码用于识别并合并需要处理的空列,具体解释如下:
1.empty_header_cols = 【i+1 for i, h in enumerate(headers) if h is None】
功能:遍历标题行headers,记录所有标题为None的列编号(从1开始计数)。
示例:若 headers =【None, "A", None】,则结果为 【1, 3】(索引0和2的标题为空,列号分别为1和3)。
2.empty_data_cols = 【col_idx+1 for col_idx in range(21) if all(row【col_idx】 is None for row in dataA)】
功能:遍历前21列(索引0-20),记录所有数据全为None的列编号(从1开始)。
示例:若第5列(索引4)在 dataA 的每一行都为None,则列号5会被加入列表。
3.merged_empty_cols = empty_header_cols if empty_header_cols else empty_data_cols
功能:合并结果,优先保留标题为空的列(empty_header_cols)。若标题无空列,则使用数据全空的列(empty_data_cols)。
逻辑:若 empty_header_cols 非空,直接使用它;否则使用empty_data_cols。
总结:代码的目的是找出需要处理的空列,优先处理标题为空的列(可能存在数据但标题缺失),若不存在标题空列,则处理数据全空的列。